#pragma once
#include "String.h"
#include "Elemento.h"
#include "Textura.h"
#include "General.h"
#include "Pelota.h"
#include "Sapo.h"
#include "Carril.h"
#include "Bonus.h"
#include "Dispersor.h"
#include "Sumidero.h"
#include <vector>
#include <SDL.h>


class Escenario
{
public:
	Escenario(String valor);
	void			  setListaElementos(vector<Elemento*> listaElementos);
	vector<Elemento*> getListaElementos();

	void			  setPelotasDisponibles(vector<Pelota*> listaPelotas);
	vector<Pelota*>   getPelotasDisponibles();

	void			  setPelotasEnCarril(vector<Pelota*> listaPelotas);
	vector<Pelota*>   getPelotasEnCarril();

	void			  setCarril(Carril* carrils){this->carril=carrils;}
	Carril*		getCarril(){return this->carril;}

	void			  setSumideros(vector<Sumidero*> lista){this->listaSumideros=lista;}
	void			  addSumidero(Sumidero* sum){this->listaSumideros.push_back(sum);}
	vector<Sumidero*>   getSumideros(){return this->listaSumideros;}

	void			  setListaDispersores(vector<Dispersor*> lista){this->listaDispersores=lista;}
	void			  addDispersor(Dispersor* disp){this->listaDispersores.push_back(disp);}
	vector<Dispersor*>   getListaDispersores(){return this->listaDispersores;}

	void			setSapo(Sapo* sapitoo){this->sapito=sapitoo;}
	Sapo*			getSapo(void){return this->sapito;}

	void			setBonusEnPantalla(Bonus* bonuss){this->bonusEnPantalla=bonuss;}
	Bonus*			getBonusEnPantalla(void){return this->bonusEnPantalla;}

	//los 5 tipos de bonus
	void			setBonusVida(Bonus* bonussVida){this->bonusVida=bonussVida;}
	Bonus*			getBonusVida(void){return this->bonusVida;}

	void			setBonusPuntos(Bonus* bonussPuntos){this->bonusPuntos=bonussPuntos;}
	Bonus*			getBonusPuntos(void){return this->bonusPuntos;}

	void			setBonusRetroceso(Bonus* bonussRetroceso){this->bonusRetroceso=bonussRetroceso;}
	Bonus*			getBonusRetroceso(void){return this->bonusRetroceso;}

	void			setBonusPrecision(Bonus* bonussPrecision){this->bonusPrecision=bonussPrecision;}
	Bonus*			getBonusPrecision(void){return this->bonusPrecision;}

	void			setBonusFreno(Bonus* bonussFreno){this->bonusFreno=bonussFreno;}
	Bonus*			getBonusFreno(void){return this->bonusFreno;}
	
	void			  SetVectorTextura(vector<Textura*> vTextura);
	Textura*		  GetTextura(String id);
	vector<Textura*>  GetListaTexturas();
	void			  SetGeneral(General *gen);
	General*		  GetGeneral();
	void			  SetId(String valor);
	String			  GetId();
	Textura*		  GetTexturaFondo();
	void			  dibujarFondo(SDL_Surface *pantalla);

	void			  setPelotaEnVuelo(Pelota* pelota);
	Pelota*			  getPelotaEnVuelo(void);

	void			setPelotaPrimaria(Pelota* pelotaPrim){this->pelotaPrimaria=pelotaPrim;}
	Pelota*			getPelotaPrimaria(void){return this->pelotaPrimaria;}

	void			setPelotaSecundaria(Pelota* pelotaSecun){this->pelotaSecundaria=pelotaSecun;}
	Pelota*			getPelotaSecundaria(void){return this->pelotaSecundaria;}

	void			setVidas(int vida){this->vidas = vida;}
	int			    getVidas(void){return this->vidas;}

	int			    getPuntos(void){return this->getCarril()->getPuntosCarril();}

	int finDeJuego; // si es 0 no finalizo, si es 1 perdio, si es 2 gano

	void			addNivel(string path){this->listaNiveles.push_back(path);}
	vector<string>  getListaNiveles(){return this->listaNiveles;}
	void			limpiarEscenario();

	vector<Pelota*> listaPelotasDisponibles;

private:
	Textura* fondoDeEscenario;
	String id;
	vector<Textura*>  listaTexturas;
	vector<Elemento*> listaElementos;
	//vector<Pelota*> listaPelotasDisponibles;

	vector<Pelota*> listaPelotasEnCarril;
	vector<Sumidero*> listaSumideros;
	vector<Dispersor*> listaDispersores;

	Sapo* sapito;
	Carril* carril;
	General* general;
	Pelota* pelotaEnVuelo;

	Bonus* bonusEnPantalla;
	Bonus* bonusVida;
	Bonus* bonusPuntos;
	Bonus* bonusRetroceso;
	Bonus* bonusPrecision;
	Bonus* bonusFreno;

	Pelota* pelotaPrimaria;
	Pelota* pelotaSecundaria;

	int vidas; //SR

	vector<string> listaNiveles;

};